home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 142 / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin / tools / s44play / s44p101s.lzh / data.s < prev    next >
Text File  |  2000-01-24  |  19KB  |  791 lines

  1.     .include    global.mac
  2.  
  3. ;----------------------------------------------------------------
  4. ;データを読み込むための準備
  5. ;>d0.l:0=正常終了,負数=エラー
  6. ;>n-flag:mi=エラー
  7.     .text
  8.     .align    4,$2048
  9. init_data::
  10.     moveq.l    #0,d0
  11.     rts
  12.  
  13. ;----------------------------------------------------------------
  14. ;データをオープンする
  15. ;    データの種類に応じて次のワークを更新する
  16. ;        data_timerd_count
  17. ;        output_frequency
  18. ;        data_frequency
  19. ;        wave_data_flag
  20. ;        mono_data_flag
  21. ;        fmp_data_flag
  22. ;        mono_play_flag
  23. ;    以下のワークは内部使用
  24. ;        read_routine
  25. ;        close_routine
  26. ;        current_file_format
  27. ;        data_format
  28. ;        preconv_routine
  29. ;<current_param_ptr.l:パラメータバッファのアドレス
  30. ;>next_param_ptr.l:次のパラメータバッファのアドレス
  31. ;>d0.l:負数=エラー,0=データなし正常終了,その他=データあり
  32. ;>n-flag:mi=エラー
  33. ;>z-flag:eq=データなし正常終了
  34.     .text
  35.     .align    4,$2048
  36. open_data::
  37.     movem.l    d1-d2/a0,-(sp)
  38.  
  39.     move.b    output_timerd_count,d0
  40.     bpl    1f
  41.     move.l    a0,-(sp)
  42.     lea.l    (default_timerd_count_table_000,pc),a0
  43.     tst.b    current_machine_num
  44.     beq    @f
  45.     lea.l    (default_timerd_count_table_030,pc),a0
  46. @@:    moveq.l    #0,d0
  47.     move.b    current_mpu_num,d0
  48.     move.b    (a0,d0.l),d0
  49.     movea.l    (sp)+,a0
  50. 1:    move.b    d0,data_timerd_count
  51.  
  52.     move.b    quality_level,d0
  53.     bpl    1f
  54.     move.l    a0,-(sp)
  55.     lea.l    (default_quality_table_000,pc),a0
  56.     tst.b    current_machine_num
  57.     beq    @f
  58.     lea.l    (default_quality_table_030,pc),a0
  59. @@:    moveq.l    #0,d0
  60.     move.b    current_mpu_num,d0
  61.     move.b    (a0,d0.l),d0
  62.     movea.l    (sp)+,a0
  63. 1:    move.b    d0,data_quality
  64.  
  65.     lea.l    (dummy_rts,pc),a0
  66.     move.l    a0,read_routine
  67.     move.l    a0,close_routine
  68.  
  69.     movea.l    current_param_ptr,a2
  70.  
  71.     move.w    (pb_format,a2),current_file_format    ;フォーマットの指定
  72.     move.l    (pb_frequency,a2),current_file_frequency    ;サンプリング周波数の指定
  73.  
  74.     tst.b    (pb_done,a2)
  75.     bne    @f
  76.     move.l    (pb_trktop_0,a2),(pb_trktop,a2)
  77.     move.l    (pb_trkbtm_0,a2),(pb_trkbtm,a2)
  78.     move.l    (pb_idxtop_0,a2),(pb_idxtop,a2)
  79.     move.l    (pb_idxbtm_0,a2),(pb_idxbtm,a2)
  80.     move.l    (pb_top_0,a2),(pb_top,a2)
  81.     move.l    (pb_btm_0,a2),(pb_btm,a2)
  82. @@:
  83.  
  84.     tst.b    (pb_is_cdxa,a2)
  85.     bne    open_data_cdxa
  86.     movea.l    (pb_ptr,a2),a0
  87.     tst.b    (a0)
  88.     beq    open_data_cdda        ;ファイル名がないのでCDDA
  89. ;ファイル名
  90. ;ファイルまたはCDXA
  91. open_data_file:
  92.     bsr    open_file
  93.     bmi    99f            ;エラー
  94.     beq    99f            ;データなし正常終了
  95.     tst.b    (pb_is_cdxa,a2)
  96.     bne    open_data_cdxa        ;CDXAだった
  97. ;ファイル
  98.     st.b    (pb_done,a2)
  99.     move.l    #read_file,read_routine
  100.     move.l    #close_file,close_routine
  101.     move.l    #get_restsize_file,get_restsize_routine
  102.     bra    50f
  103.  
  104. ;トラック番号
  105. ;CDDA
  106. open_data_cdda:
  107.     bsr    open_cdda
  108.     bmi    99f            ;エラー
  109.     beq    99f            ;データなし正常終了
  110.     st.b    (pb_done,a2)
  111.     move.l    #read_cdda,read_routine
  112.     move.l    #close_cdda,close_routine
  113.     move.l    #get_restsize_cdda,get_restsize_routine
  114.     bra    50f
  115.  
  116. ;ファイル名
  117. ;CDXA
  118. open_data_cdxa:
  119.     bsr    open_cdxa
  120.     bmi    99f            ;エラー
  121.     beq    99f            ;データなし正常終了
  122.     st.b    (pb_done,a2)
  123.     move.l    #read_cdxa,read_routine
  124.     move.l    #close_cdxa,close_routine
  125.     move.l    #get_restsize_cdxa,get_restsize_routine
  126.     bra    50f
  127. ;
  128.  
  129. ;再生条件をまとめる
  130. 50:    move.w    data_format,d0
  131.     lea.l    (wave_flag_table,pc),a0
  132.     move.b    (a0,d0.w),wave_data_flag
  133.     lea.l    (mono_data_table,pc),a0
  134.     move.b    (a0,d0.w),mono_data_flag
  135.     lea.l    (fmp_data_table,pc),a0
  136.     move.b    (a0,d0.w),fmp_data_flag
  137.     lea.l    (adpcm_data_table,pc),a0
  138.     move.b    (a0,d0.w),adpcm_data_flag
  139.     lea.l    (cdxa_data_table,pc),a0
  140.     move.b    (a0,d0.w),cdxa_data_flag
  141.     lea.l    (xx_data_table,pc),a0
  142.     move.b    (a0,d0.w),xx_data_flag
  143.  
  144.     st.b    d0
  145.     tst.b    mono_data_flag
  146.     bne    2f
  147.     cmpi.w    #SFMP,data_format    ;ステレオのFMPファイルはモノラルで再生できない
  148.     beq    1f
  149.     tst.b    mono_flag
  150.     bne    2f
  151. 1:    sf.b    d0
  152. 2:    move.b    d0,mono_play_flag
  153.  
  154. ;出力側のサンプリング周波数を求める
  155.     move.b    data_timerd_count,d0
  156.     moveq.l    #1,d1
  157.     tst.b    mono_play_flag
  158.     bne    @f
  159.     moveq.l    #2,d1
  160. @@:    bsr    timerd_count_to_frequency
  161.     move.l    d0,output_frequency
  162.  
  163. ;モノラルでサンプリング周波数の変換が発生しないときは,
  164. ;強制的にLow Qualityモードにする
  165.     tst.b    mono_data_flag
  166.     beq    2f
  167.     tst.b    mono_play_flag
  168.     beq    2f
  169.     move.l    data_frequency,d0
  170.     cmp.l    output_frequency,d0
  171.     bne    2f
  172.     move.b    #LOW_QUALITY,data_quality
  173. 2:
  174.  
  175.   .if 0
  176. ;ADPCMデータはHigh Qualityまで
  177.     tst.b    adpcm_data_flag
  178.     beq    2f
  179.     moveq.l    #HIGH_QUALITY,d0
  180.     cmp.b    data_quality,d0
  181.     bhs    2f
  182.     move.b    d0,data_quality
  183. 2:
  184.   .endif
  185.  
  186. ;サンプリング周波数の変換方法とモノラル/ステレオの区別から,
  187. ;前処理ルーチンのアドレスを決定する
  188.     tst.b    bass_flag
  189.     bne    10f
  190.     tst.b    hicut_flag
  191.     bne    11f
  192.  
  193. ;ノーマル
  194.     move.b    data_quality,d0
  195.     bne    1f
  196.     lea.l    (preconv_mono_play_table_lq,pc),a0
  197.     tst.b    mono_play_flag
  198.     bne    @f
  199.     lea.l    (preconv_stereo_play_table_lq,pc),a0
  200. @@:    bra    2f
  201. 1:    subq.b    #1,d0
  202.     bne    1f
  203.     lea.l    (preconv_mono_play_table_hq,pc),a0
  204.     tst.b    mono_play_flag
  205.     bne    @f
  206.     lea.l    (preconv_stereo_play_table_hq,pc),a0
  207. @@:    bra    2f
  208. 1:
  209.     lea.l    (preconv_mono_play_table_sq,pc),a0
  210.     tst.b    mono_play_flag
  211.     bne    @f
  212.     lea.l    (preconv_stereo_play_table_sq,pc),a0
  213. @@:    bra    2f
  214. 2:
  215.  
  216.     bra    20f
  217.  
  218. ;バスブースターを使用する
  219. 10:    move.b    data_quality,d0
  220.     bne    1f
  221.     lea.l    (preconv_bass_mono_play_table_lq,pc),a0
  222.     tst.b    mono_play_flag
  223.     bne    @f
  224.     lea.l    (preconv_bass_stereo_play_table_lq,pc),a0
  225. @@:    bra    2f
  226. 1:    subq.b    #1,d0
  227.     bne    1f
  228.     lea.l    (preconv_bass_mono_play_table_hq,pc),a0
  229.     tst.b    mono_play_flag
  230.     bne    @f
  231.     lea.l    (preconv_bass_stereo_play_table_hq,pc),a0
  232. @@:    bra    2f
  233. 1:
  234.     lea.l    (preconv_bass_mono_play_table_sq,pc),a0
  235.     tst.b    mono_play_flag
  236.     bne    @f
  237.     lea.l    (preconv_bass_stereo_play_table_sq,pc),a0
  238. @@:    bra    2f
  239. 2:
  240.  
  241.     bra    20f
  242.  
  243. ;ハイカットフィルタを使用する
  244. 11:    move.b    data_quality,d0
  245.     bne    1f
  246.     lea.l    (preconv_hicut_mono_play_table_lq,pc),a0
  247.     tst.b    mono_play_flag
  248.     bne    @f
  249.     lea.l    (preconv_hicut_stereo_play_table_lq,pc),a0
  250. @@:    bra    2f
  251. 1:    subq.b    #1,d0
  252.     bne    1f
  253.     lea.l    (preconv_hicut_mono_play_table_hq,pc),a0
  254.     tst.b    mono_play_flag
  255.     bne    @f
  256.     lea.l    (preconv_hicut_stereo_play_table_hq,pc),a0
  257. @@:    bra    2f
  258. 1:
  259.     lea.l    (preconv_hicut_mono_play_table_sq,pc),a0
  260.     tst.b    mono_play_flag
  261.     bne    @f
  262.     lea.l    (preconv_hicut_stereo_play_table_sq,pc),a0
  263. @@:    bra    2f
  264. 2:
  265.  
  266. 20:
  267.  
  268.     move.w    data_format,d0
  269.     add.w    d0,d0
  270.     add.w    d0,d0
  271.     move.l    (a0,d0.w),preconv_routine
  272.  
  273. ;入力データの1秒あたりのバイト数を求める
  274.     move.l    data_frequency,d0    ;入力データのサンプリング周波数
  275.     move.w    data_format,d1
  276.     lea.l    (data_unit_table,pc),a0
  277.     move.b    (a0,d1.w),d1        ;シフトカウント
  278.     bmi    1f
  279.     lsl.l    d1,d0
  280.     bra    2f
  281. 1:    neg.b    d1
  282.     lsr.l    d1,d0
  283. 2:    move.l    d0,data_tick_size    ;入力データの1秒あたりのバイト数(過小評価)
  284.  
  285. ;出力データの1秒あたりのバイト数を求める
  286.     move.l    output_frequency,d0    ;出力データのサンプリング周波数
  287.     tst.b    mono_play_flag
  288.     bne    @f
  289.     add.l    d0,d0            ;ステレオならば2倍
  290. @@:    move.l    d0,output_tick_size    ;出力データの1秒あたりのバイト数(過大評価)
  291.  
  292. ;入力データよりも出力データのほうが大きいときは,
  293. ;読み込むサイズを調整する必要がある
  294.     move.l    data_tick_size,d0    ;入力データの1秒あたりのバイト数(過小評価)
  295.     move.l    output_tick_size,d1    ;出力データの1秒あたりのバイト数(過大評価)
  296.     moveq.l    #0,d2
  297.     bra    2f
  298. 1:    addq.b    #1,d2
  299.     add.l    d0,d0
  300. 2:    cmp.l    d1,d0
  301.     blo    1b
  302.     move.b    d2,read_shift_count    ;1度に読み込むデータの長さの右シフトカウント
  303.  
  304.     moveq.l    #1,d0            ;データあり
  305.  
  306. 99:    movem.l    (sp)+,d1-d2/a0
  307.     rts
  308.  
  309. 80:    moveq.l    #-1,d0
  310.     bra    99b
  311.  
  312. dummy_rts:
  313.     moveq.l    #-1,d0
  314.     rts
  315.  
  316. ;TIMERD_COUNTのデフォルト値のテーブル
  317. default_timerd_count_table_000::    ;プラットフォームがX68000
  318.     .dc.b    TIMERD_COUNT_000    ;X68000
  319.     .dc.b    TIMERD_COUNT_000
  320.     .dc.b    TIMERD_COUNT_030
  321.     .dc.b    TIMERD_COUNT_030    ;Xellent30/VENUS-X
  322.     .dc.b    TIMERD_COUNT_040    ;JUPITER-X
  323.     .dc.b    0
  324.     .dc.b    TIMERD_COUNT_060    ;JUPITER-X
  325.  
  326. default_timerd_count_table_030::    ;プラットフォームがX68030
  327.     .dc.b    TIMERD_COUNT_000
  328.     .dc.b    TIMERD_COUNT_000
  329.     .dc.b    TIMERD_COUNT_030
  330.     .dc.b    TIMERD_COUNT_030    ;X68030
  331.     .dc.b    TIMERD_COUNT_040    ;040turbo
  332.     .dc.b    0
  333.     .dc.b    TIMERD_COUNT_060    ;060turbo
  334.  
  335. ;再生品質のデフォルト値のテーブル
  336. default_quality_table_000:        ;プラットフォームがX68000
  337.     .dc.b    DEFAULT_QUALITY_000    ;X68000
  338.     .dc.b    DEFAULT_QUALITY_000
  339.     .dc.b    DEFAULT_QUALITY_030
  340.     .dc.b    DEFAULT_QUALITY_030    ;Xellent30/VENUS-X
  341.     .dc.b    DEFAULT_QUALITY_040    ;JUPITER-X
  342.     .dc.b    0
  343.     .dc.b    DEFAULT_QUALITY_060    ;JUPITER-X
  344. default_quality_table_030:        ;プラットフォームがX68030
  345.     .dc.b    DEFAULT_QUALITY_000
  346.     .dc.b    DEFAULT_QUALITY_000
  347.     .dc.b    DEFAULT_QUALITY_030
  348.     .dc.b    DEFAULT_QUALITY_030    ;X68030
  349.     .dc.b    DEFAULT_QUALITY_040    ;040turbo
  350.     .dc.b    0
  351.     .dc.b    DEFAULT_QUALITY_060    ;060turbo
  352.  
  353.     .align    4
  354. preconv_mono_play_table_lq:
  355.     .dc.l    preconv_ss16b_mono_LQ
  356.     .dc.l    preconv_ms16b_mono_LQ
  357.     .dc.l    preconv_ss16l_mono_LQ
  358.     .dc.l    preconv_ms16l_mono_LQ
  359.     .dc.l    preconv_sfmp_mono_LQ
  360.     .dc.l    preconv_mfmp_mono_LQ
  361.     .dc.l    preconv_adpcm_LQ
  362.     .dc.l    preconv_sxa4_mono_LQ
  363.     .dc.l    preconv_mxa4_mono_LQ
  364.     .dc.l    preconv_sxx4_mono_LQ
  365.     .dc.l    preconv_mxx4_mono_LQ
  366.  
  367.     .align    4
  368. preconv_stereo_play_table_lq:
  369.     .dc.l    preconv_ss16b_stereo_LQ
  370.     .dc.l    preconv_ms16b_mono_LQ
  371.     .dc.l    preconv_ss16l_stereo_LQ
  372.     .dc.l    preconv_ms16l_mono_LQ
  373.     .dc.l    preconv_sfmp_stereo_LQ
  374.     .dc.l    preconv_mfmp_mono_LQ
  375.     .dc.l    preconv_adpcm_LQ
  376.     .dc.l    preconv_sxa4_stereo_LQ
  377.     .dc.l    preconv_mxa4_mono_LQ
  378.     .dc.l    preconv_sxx4_stereo_LQ
  379.     .dc.l    preconv_mxx4_mono_LQ
  380.  
  381.     .align    4
  382. preconv_mono_play_table_hq:
  383.     .dc.l    preconv_ss16b_mono_HQ
  384.     .dc.l    preconv_ms16b_mono_HQ
  385.     .dc.l    preconv_ss16l_mono_HQ
  386.     .dc.l    preconv_ms16l_mono_HQ
  387.     .dc.l    preconv_sfmp_mono_HQ
  388.     .dc.l    preconv_mfmp_mono_HQ
  389.     .dc.l    preconv_adpcm_HQ
  390.     .dc.l    preconv_sxa4_mono_HQ
  391.     .dc.l    preconv_mxa4_mono_HQ
  392.     .dc.l    preconv_sxx4_mono_HQ
  393.     .dc.l    preconv_mxx4_mono_HQ
  394.  
  395.     .align    4
  396. preconv_stereo_play_table_hq:
  397.     .dc.l    preconv_ss16b_stereo_HQ
  398.     .dc.l    preconv_ms16b_mono_HQ
  399.     .dc.l    preconv_ss16l_stereo_HQ
  400.     .dc.l    preconv_ms16l_mono_HQ
  401.     .dc.l    preconv_sfmp_stereo_HQ
  402.     .dc.l    preconv_mfmp_mono_HQ
  403.     .dc.l    preconv_adpcm_HQ
  404.     .dc.l    preconv_sxa4_stereo_HQ
  405.     .dc.l    preconv_mxa4_mono_HQ
  406.     .dc.l    preconv_sxx4_stereo_HQ
  407.     .dc.l    preconv_mxx4_mono_HQ
  408.  
  409.     .align    4
  410. preconv_mono_play_table_sq:
  411.     .dc.l    preconv_ss16b_mono_SQ
  412.     .dc.l    preconv_ms16b_mono_SQ
  413.     .dc.l    preconv_ss16l_mono_SQ
  414.     .dc.l    preconv_ms16l_mono_SQ
  415.     .dc.l    preconv_sfmp_mono_SQ
  416.     .dc.l    preconv_mfmp_mono_SQ
  417.     .dc.l    preconv_adpcm_SQ
  418.     .dc.l    preconv_sxa4_mono_SQ
  419.     .dc.l    preconv_mxa4_mono_SQ
  420.     .dc.l    preconv_sxx4_mono_SQ
  421.     .dc.l    preconv_mxx4_mono_SQ
  422.  
  423.     .align    4
  424. preconv_stereo_play_table_sq:
  425.     .dc.l    preconv_ss16b_stereo_SQ
  426.     .dc.l    preconv_ms16b_mono_SQ
  427.     .dc.l    preconv_ss16l_stereo_SQ
  428.     .dc.l    preconv_ms16l_mono_SQ
  429.     .dc.l    preconv_sfmp_stereo_SQ
  430.     .dc.l    preconv_mfmp_mono_SQ
  431.     .dc.l    preconv_adpcm_SQ
  432.     .dc.l    preconv_sxa4_stereo_SQ
  433.     .dc.l    preconv_mxa4_mono_SQ
  434.     .dc.l    preconv_sxx4_stereo_SQ
  435.     .dc.l    preconv_mxx4_mono_SQ
  436.  
  437.  
  438.  
  439.  
  440.     .align    4
  441. preconv_bass_mono_play_table_lq:
  442.     .dc.l    preconv_bass_ss16b_mono_LQ
  443.     .dc.l    preconv_bass_ms16b_mono_LQ
  444.     .dc.l    preconv_bass_ss16l_mono_LQ
  445.     .dc.l    preconv_bass_ms16l_mono_LQ
  446.     .dc.l    preconv_sfmp_mono_LQ
  447.     .dc.l    preconv_mfmp_mono_LQ
  448.     .dc.l    preconv_adpcm_LQ
  449.     .dc.l    preconv_sxa4_mono_LQ
  450.     .dc.l    preconv_mxa4_mono_LQ
  451.     .dc.l    preconv_sxx4_mono_LQ
  452.     .dc.l    preconv_mxx4_mono_LQ
  453.  
  454.     .align    4
  455. preconv_bass_stereo_play_table_lq:
  456.     .dc.l    preconv_bass_ss16b_stereo_LQ
  457.     .dc.l    preconv_bass_ms16b_mono_LQ
  458.     .dc.l    preconv_bass_ss16l_stereo_LQ
  459.     .dc.l    preconv_bass_ms16l_mono_LQ
  460.     .dc.l    preconv_sfmp_stereo_LQ
  461.     .dc.l    preconv_mfmp_mono_LQ
  462.     .dc.l    preconv_adpcm_LQ
  463.     .dc.l    preconv_sxa4_stereo_LQ
  464.     .dc.l    preconv_mxa4_mono_LQ
  465.     .dc.l    preconv_sxx4_stereo_LQ
  466.     .dc.l    preconv_mxx4_mono_LQ
  467.  
  468.     .align    4
  469. preconv_bass_mono_play_table_hq:
  470.     .dc.l    preconv_bass_ss16b_mono_HQ
  471.     .dc.l    preconv_bass_ms16b_mono_HQ
  472.     .dc.l    preconv_bass_ss16l_mono_HQ
  473.     .dc.l    preconv_bass_ms16l_mono_HQ
  474.     .dc.l    preconv_sfmp_mono_HQ
  475.     .dc.l    preconv_mfmp_mono_HQ
  476.     .dc.l    preconv_adpcm_HQ
  477.     .dc.l    preconv_sxa4_mono_HQ
  478.     .dc.l    preconv_mxa4_mono_HQ
  479.     .dc.l    preconv_sxx4_mono_HQ
  480.     .dc.l    preconv_mxx4_mono_HQ
  481.  
  482.     .align    4
  483. preconv_bass_stereo_play_table_hq:
  484.     .dc.l    preconv_bass_ss16b_stereo_HQ
  485.     .dc.l    preconv_bass_ms16b_mono_HQ
  486.     .dc.l    preconv_bass_ss16l_stereo_HQ
  487.     .dc.l    preconv_bass_ms16l_mono_HQ
  488.     .dc.l    preconv_sfmp_stereo_HQ
  489.     .dc.l    preconv_mfmp_mono_HQ
  490.     .dc.l    preconv_adpcm_HQ
  491.     .dc.l    preconv_sxa4_stereo_HQ
  492.     .dc.l    preconv_mxa4_mono_HQ
  493.     .dc.l    preconv_sxx4_stereo_HQ
  494.     .dc.l    preconv_mxx4_mono_HQ
  495.  
  496.     .align    4
  497. preconv_bass_mono_play_table_sq:
  498.     .dc.l    preconv_bass_ss16b_mono_SQ
  499.     .dc.l    preconv_bass_ms16b_mono_SQ
  500.     .dc.l    preconv_bass_ss16l_mono_SQ
  501.     .dc.l    preconv_bass_ms16l_mono_SQ
  502.     .dc.l    preconv_sfmp_mono_SQ
  503.     .dc.l    preconv_mfmp_mono_SQ
  504.     .dc.l    preconv_adpcm_SQ
  505.     .dc.l    preconv_sxa4_mono_SQ
  506.     .dc.l    preconv_mxa4_mono_SQ
  507.     .dc.l    preconv_sxx4_mono_SQ
  508.     .dc.l    preconv_mxx4_mono_SQ
  509.  
  510.     .align    4
  511. preconv_bass_stereo_play_table_sq:
  512.     .dc.l    preconv_bass_ss16b_stereo_SQ
  513.     .dc.l    preconv_bass_ms16b_mono_SQ
  514.     .dc.l    preconv_bass_ss16l_stereo_SQ
  515.     .dc.l    preconv_bass_ms16l_mono_SQ
  516.     .dc.l    preconv_sfmp_stereo_SQ
  517.     .dc.l    preconv_mfmp_mono_SQ
  518.     .dc.l    preconv_adpcm_SQ
  519.     .dc.l    preconv_sxa4_stereo_SQ
  520.     .dc.l    preconv_mxa4_mono_SQ
  521.     .dc.l    preconv_sxx4_stereo_SQ
  522.     .dc.l    preconv_mxx4_mono_SQ
  523.  
  524.  
  525.  
  526.  
  527.     .align    4
  528. preconv_hicut_mono_play_table_lq:
  529.     .dc.l    preconv_hicut_ss16b_mono_LQ
  530.     .dc.l    preconv_hicut_ms16b_mono_LQ
  531.     .dc.l    preconv_hicut_ss16l_mono_LQ
  532.     .dc.l    preconv_hicut_ms16l_mono_LQ
  533.     .dc.l    preconv_sfmp_mono_LQ
  534.     .dc.l    preconv_mfmp_mono_LQ
  535.     .dc.l    preconv_adpcm_LQ
  536.     .dc.l    preconv_sxa4_mono_LQ
  537.     .dc.l    preconv_mxa4_mono_LQ
  538.     .dc.l    preconv_sxx4_mono_LQ
  539.     .dc.l    preconv_mxx4_mono_LQ
  540.  
  541.     .align    4
  542. preconv_hicut_stereo_play_table_lq:
  543.     .dc.l    preconv_hicut_ss16b_stereo_LQ
  544.     .dc.l    preconv_hicut_ms16b_mono_LQ
  545.     .dc.l    preconv_hicut_ss16l_stereo_LQ
  546.     .dc.l    preconv_hicut_ms16l_mono_LQ
  547.     .dc.l    preconv_sfmp_stereo_LQ
  548.     .dc.l    preconv_mfmp_mono_LQ
  549.     .dc.l    preconv_adpcm_LQ
  550.     .dc.l    preconv_sxa4_stereo_LQ
  551.     .dc.l    preconv_mxa4_mono_LQ
  552.     .dc.l    preconv_sxx4_stereo_LQ
  553.     .dc.l    preconv_mxx4_mono_LQ
  554.  
  555.     .align    4
  556. preconv_hicut_mono_play_table_hq:
  557.     .dc.l    preconv_hicut_ss16b_mono_HQ
  558.     .dc.l    preconv_hicut_ms16b_mono_HQ
  559.     .dc.l    preconv_hicut_ss16l_mono_HQ
  560.     .dc.l    preconv_hicut_ms16l_mono_HQ
  561.     .dc.l    preconv_sfmp_mono_HQ
  562.     .dc.l    preconv_mfmp_mono_HQ
  563.     .dc.l    preconv_adpcm_HQ
  564.     .dc.l    preconv_sxa4_mono_HQ
  565.     .dc.l    preconv_mxa4_mono_HQ
  566.     .dc.l    preconv_sxx4_mono_HQ
  567.     .dc.l    preconv_mxx4_mono_HQ
  568.  
  569.     .align    4
  570. preconv_hicut_stereo_play_table_hq:
  571.     .dc.l    preconv_hicut_ss16b_stereo_HQ
  572.     .dc.l    preconv_hicut_ms16b_mono_HQ
  573.     .dc.l    preconv_hicut_ss16l_stereo_HQ
  574.     .dc.l    preconv_hicut_ms16l_mono_HQ
  575.     .dc.l    preconv_sfmp_stereo_HQ
  576.     .dc.l    preconv_mfmp_mono_HQ
  577.     .dc.l    preconv_adpcm_HQ
  578.     .dc.l    preconv_sxa4_stereo_HQ
  579.     .dc.l    preconv_mxa4_mono_HQ
  580.     .dc.l    preconv_sxx4_stereo_HQ
  581.     .dc.l    preconv_mxx4_mono_HQ
  582.  
  583.     .align    4
  584. preconv_hicut_mono_play_table_sq:
  585.     .dc.l    preconv_hicut_ss16b_mono_SQ
  586.     .dc.l    preconv_hicut_ms16b_mono_SQ
  587.     .dc.l    preconv_hicut_ss16l_mono_SQ
  588.     .dc.l    preconv_hicut_ms16l_mono_SQ
  589.     .dc.l    preconv_sfmp_mono_SQ
  590.     .dc.l    preconv_mfmp_mono_SQ
  591.     .dc.l    preconv_adpcm_SQ
  592.     .dc.l    preconv_sxa4_mono_SQ
  593.     .dc.l    preconv_mxa4_mono_SQ
  594.     .dc.l    preconv_sxx4_mono_SQ
  595.     .dc.l    preconv_mxx4_mono_SQ
  596.  
  597.     .align    4
  598. preconv_hicut_stereo_play_table_sq:
  599.     .dc.l    preconv_hicut_ss16b_stereo_SQ
  600.     .dc.l    preconv_hicut_ms16b_mono_SQ
  601.     .dc.l    preconv_hicut_ss16l_stereo_SQ
  602.     .dc.l    preconv_hicut_ms16l_mono_SQ
  603.     .dc.l    preconv_sfmp_stereo_SQ
  604.     .dc.l    preconv_mfmp_mono_SQ
  605.     .dc.l    preconv_adpcm_SQ
  606.     .dc.l    preconv_sxa4_stereo_SQ
  607.     .dc.l    preconv_mxa4_mono_SQ
  608.     .dc.l    preconv_sxx4_stereo_SQ
  609.     .dc.l    preconv_mxx4_mono_SQ
  610.  
  611.  
  612.  
  613.  
  614. wave_flag_table:
  615.     .dc.b    0    ;SS16B
  616.     .dc.b    0    ;MS16B
  617.     .dc.b    -1    ;SS16L
  618.     .dc.b    -1    ;MS16L
  619.     .dc.b    0    ;SFMP
  620.     .dc.b    0    ;MFMP
  621.     .dc.b    0    ;ADPCM
  622.     .dc.b    0    ;SXA4
  623.     .dc.b    0    ;MXA4
  624.     .dc.b    0    ;SXX4
  625.     .dc.b    0    ;MXX4
  626.  
  627. mono_data_table:
  628.     .dc.b    0    ;SS16B
  629.     .dc.b    -1    ;MS16B
  630.     .dc.b    0    ;SS16L
  631.     .dc.b    -1    ;MS16L
  632.     .dc.b    0    ;SFMP
  633.     .dc.b    -1    ;MFMP
  634.     .dc.b    -1    ;ADPCM
  635.     .dc.b    0    ;SXA4
  636.     .dc.b    -1    ;MXA4
  637.     .dc.b    0    ;SXX4
  638.     .dc.b    -1    ;MXX4
  639.  
  640. fmp_data_table:
  641.     .dc.b    0    ;SS16B
  642.     .dc.b    0    ;MS16B
  643.     .dc.b    0    ;SS16L
  644.     .dc.b    0    ;MS16L
  645.     .dc.b    -1    ;SFMP
  646.     .dc.b    -1    ;MFMP
  647.     .dc.b    0    ;ADPCM
  648.     .dc.b    0    ;SXA4
  649.     .dc.b    0    ;MXA4
  650.     .dc.b    0    ;SXX4
  651.     .dc.b    0    ;MXX4
  652.  
  653. adpcm_data_table:
  654.     .dc.b    0    ;SS16B
  655.     .dc.b    0    ;MS16B
  656.     .dc.b    0    ;SS16L
  657.     .dc.b    0    ;MS16L
  658.     .dc.b    0    ;SFMP
  659.     .dc.b    0    ;MFMP
  660.     .dc.b    -1    ;ADPCM
  661.     .dc.b    0    ;SXA4
  662.     .dc.b    0    ;MXA4
  663.     .dc.b    0    ;SXX4
  664.     .dc.b    0    ;MXX4
  665.  
  666. cdxa_data_table:
  667.     .dc.b    0    ;SS16B
  668.     .dc.b    0    ;MS16B
  669.     .dc.b    0    ;SS16L
  670.     .dc.b    0    ;MS16L
  671.     .dc.b    0    ;SFMP
  672.     .dc.b    0    ;MFMP
  673.     .dc.b    0    ;ADPCM
  674.     .dc.b    -1    ;SXA4
  675.     .dc.b    -1    ;MXA4
  676.     .dc.b    0    ;SXX4
  677.     .dc.b    0    ;MXX4
  678.  
  679. xx_data_table:
  680.     .dc.b    0    ;SS16B
  681.     .dc.b    0    ;MS16B
  682.     .dc.b    0    ;SS16L
  683.     .dc.b    0    ;MS16L
  684.     .dc.b    0    ;SFMP
  685.     .dc.b    0    ;MFMP
  686.     .dc.b    0    ;ADPCM
  687.     .dc.b    0    ;SXA4
  688.     .dc.b    0    ;MXA4
  689.     .dc.b    -1    ;SXX4
  690.     .dc.b    -1    ;MXX4
  691.  
  692. ;1サンプリングあたりのデータ長のシフトカウント
  693. ;    (入力側は過小評価,出力側は過大評価)
  694. data_unit_table:
  695.     .dc.b    2    ;SS16B(×4)
  696.     .dc.b    1    ;MS16B(×2)
  697.     .dc.b    2    ;SS16L(×4)
  698.     .dc.b    1    ;MS16L(×2)
  699.     .dc.b    1    ;SFMP(×2)
  700.     .dc.b    0    ;MFMP(×1)
  701.     .dc.b    -1    ;ADPCM(×0.5)
  702.     .dc.b    0    ;SXA4(×1)
  703.     .dc.b    -1    ;MXA4(×0.5)
  704.     .dc.b    0    ;SXX4(×1)
  705.     .dc.b    -1    ;MXX4(×0.5)
  706.     .even
  707.  
  708.     .data
  709.     .align    4
  710. read_routine:        .dc.l    dummy_rts
  711. preconv_routine::    .dc.l    dummy_rts
  712. close_routine:        .dc.l    dummy_rts
  713. get_restsize_routine:    .dc.l    dummy_rts
  714.  
  715. mono_data_flag::    .dc.b    0    ;-1=モノラルデータ
  716. wave_data_flag::    .dc.b    0    ;-1=WAVEデータ(little-endian)
  717. fmp_data_flag::        .dc.b    0    ;-1=FMPデータ
  718. adpcm_data_flag::    .dc.b    0    ;-1=ADPCMデータ
  719. cdxa_data_flag::    .dc.b    0    ;-1=CDXAデータ
  720. xx_data_flag::        .dc.b    0    ;-1=xxデータ
  721. mono_play_flag::    .dc.b    0    ;-1=モノラル再生
  722.  
  723.     .bss
  724.     .even
  725. current_file_format::    .ds.w    1    ;パラメータで指定されたフォーマット
  726.     .align    4
  727. current_file_frequency::    .ds.l    1    ;パラメータで指定されたサンプリング周波数
  728.     .even
  729. data_format::        .ds.w    1    ;データの実際のフォーマット
  730.     .align    4
  731. output_frequency::    .ds.l    1    ;出力側のサンプリング周波数(Hz)
  732. data_frequency::    .ds.l    1    ;データのサンプリング周波数(Hz)
  733. data_timerd_count::    .ds.b    1    ;TIMERD割り込み間隔(μs)
  734. data_quality::        .ds.b    1    ;再生品質
  735.                     ; 0=符号が変わってもチャンネル遷移しない
  736.                     ; 1=符号が変わったらチャンネル遷移する
  737.                     ;  周波数変換は重複・間引き
  738.                     ; 2=符号が変わったらチャンネル遷移する
  739.                     ;  周波数変換は面積補間
  740.     .align    4
  741. data_tick_size:        .ds.l    1    ;入力データの1秒あたりのバイト数(過小評価)
  742. output_tick_size:    .ds.l    1    ;出力データの1秒あたりのバイト数(過大評価)
  743. read_shift_count::    .ds.b    1    ;1度に読み込むデータの長さの右シフトカウント
  744.  
  745. ;----------------------------------------------------------------
  746. ;データを読み込む
  747. ;<a0.l:出力バッファの先頭
  748. ;<a1.l:入力バッファの先頭
  749. ;>d0.l:データのサイズ,0=終了,-1=エラー
  750. ;>n-flag:mi=エラー
  751. ;>z-flag:eq=終了
  752.     .text
  753.     .align    4,$2048
  754. read_data::
  755.     movem.l    a0-a2,-(sp)
  756.     bsr    break_kill
  757.     movea.l    read_routine,a2
  758.     jsr    (a2)
  759.     bsr    break_load
  760.     movem.l    (sp)+,a0-a2
  761.     tst.l    d0            ;0なら終了
  762.     rts
  763.  
  764. ;----------------------------------------------------------------
  765. ;データをクローズする
  766.     .text
  767.     .align    4,$2048
  768. close_data::
  769.     move.l    a1,-(sp)
  770.     movea.l    close_routine,a1
  771.     jsr    (a1)
  772.     lea.l    (dummy_rts,pc),a1
  773.     move.l    a1,read_routine
  774.     move.l    a1,close_routine
  775.     movea.l    (sp)+,a1
  776.     tst.l    d0
  777.     rts
  778.  
  779. ;----------------------------------------------------------------
  780. ;データの残りバイト数を得る
  781.     .text
  782.     .align    4,$2048
  783. get_restsize_data::
  784.     move.l    a1,-(sp)
  785.     movea.l    get_restsize_routine,a1
  786.     jsr    (a1)
  787.     movea.l    (sp)+,a1
  788.     tst.l    d0
  789.     rts
  790.  
  791.